package 框架学习.ApachePOI;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Apache POI快速入门
 */
public class POITest {
    /**
     * 创建并写入Excel
     */
    @Test
    public void write() throws IOException {
        //创建新的Excel文件（其实是在内存创建的），XSSFWorkbook就代表excel文件
        XSSFWorkbook excel = new XSSFWorkbook();

        //在excel文件中创建一个sheet页
        XSSFSheet sheet = excel.createSheet("infoSheet1");

        //在sheet页中创建行对象（参数：行号，从0开始）
        XSSFRow row = sheet.createRow(1);

        //在行中创建单元格（参数：单元格索引，从0开始）
        XSSFCell cell = row.createCell(1);

        //往单元格中书写内容
        cell.setCellValue("姓名");

        //再创建另一个单元格并向其中写入内容（链式编程）
        row.createCell(2).setCellValue("城市");

        //再创建新行（可以直接用之前的对象来接收）
        row = sheet.createRow(2);
        //创建单元格并写入内容
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("安顺");

        //再创建新行（可以直接用之前的对象来接收）
        row = sheet.createRow(3);
        //创建单元格并写入内容
        row.createCell(1).setCellValue("李四");
        row.createCell(2).setCellValue("贵阳");

        //写入磁盘文件
        FileOutputStream fos = new FileOutputStream("D:\\java(学习)\\JavaWeb_learn\\src\\main\\java\\框架学习\\ApachePOI\\newFile.xlsx");
        excel.write(fos);

        //释放资源
        fos.close();
        excel.close();
    }

    /**
     * 读取Excel内容
     *
     * @throws IOException
     */
    @Test
    public void read() throws IOException {
        //读取磁盘中excel文件并封装成对象
        FileInputStream fis = new FileInputStream("D:\\java(学习)\\JavaWeb_learn\\src\\main\\java\\框架学习\\ApachePOI\\newFile.xlsx");
        XSSFWorkbook excel = new XSSFWorkbook(fis);

        //读取excel中第一个sheet页（参数：sheet索引，从0开始）
        XSSFSheet sheet = excel.getSheetAt(0);
        //excel.getSheet("name");//通过sheet页名字获取

        //获取sheet中最后有文字的行的行号（从0开始）
        int lastRowNum = sheet.getLastRowNum();

        //遍历
        for (int i = 1; i <= lastRowNum; i++) {
            //根据行号获取行
            XSSFRow row = sheet.getRow(i);

            //获得单元格对象
            String stringCellValue1 = row.getCell(1).getStringCellValue();
            String stringCellValue2 = row.getCell(2).getStringCellValue();

            System.out.println(stringCellValue1 + " " + stringCellValue2);
        }

        //释放资源
        excel.close();
        fis.close();
    }
}
